This invention relates to data memory systems and, more specifically, is concerned with a data memory system including a copy-back cache.
It is well known to provide a two-level memory system, consisting of a main memory and a smaller, faster cache memory. In operation, the cache is arranged to hold copies of data items from the main memory that are currently in use, or are likely to be required in the near future, so that these items can be accessed rapidly, without the delay of a main memory access. Such memories are described, for example, in "Cache Memories" by A. J. Smith, ACM Computing Surveys, September 1982, page 473.
In such a memory system, when a data item in the cache is written to (updated), the new value must also eventually be written into the main memory, so as to keep it up-to-date. There are two strategies normally used for this, referred to as write-through and copy-back. In the write-through strategy, whenever an item is updated in the cache, the updated value is immediately written to the main memory. In the copy-back strategy, on the other hand, the main memory is updated at some later time, usually only when the modified data item is about to be cast out of the cache to make room for another item. This has the advantage that it reduces the number of accesses to main memory. The present invention is concerned only with caches that use this copy-back strategy.
It is also known in virtual caches to tag the data items in a cache with context numbers, to indicate which of a number of different processes or programs the data item at a particular virtual address is associated with. Whenever a data item is loaded into the cache, it is tagged with the current context number, i.e. the context number of the program that is currently being executed. Whenever a data item is accessed in the cache, its context tag is compared with the current context number and, if they are not equal, a "miss" signal is produced, indicating that the required data item is not present in the cache. This allows the cache to hold data relating to a number of different contexts, while avoiding the necessity for clearing the whole cache when the context is changed.
Normally, context numbers are allocated sequentially to programs when required. Eventually, however, all possible context numbers will have been allocated, and in this case it is necessary to "flush" the cache, to allow the context numbers to be used again for subsequent programs.
The usual technique for flushing a copy-back cache is to step through each data location in turn, and to copy back the contents of each modified location to the main memory. This ensures that the modified values are preserved in the main memory before the data in the cache is invalidated. However, this flushing procedure takes a relatively long time, and can result in an undesirable interruption on the operation of the system.
The object of the present invention is to overcome this problem.